home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1998 August / PC Plus SuperCD 50a Issue 142 (CD142a) (August 1998).iso / full / jbuild / setup / JBuilder / jruntime.z / select.jar / sun / demo / select / SelectCustomizer.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-12-17  |  10.6 KB  |  463 lines

  1. package sun.demo.select;
  2.  
  3. import java.awt.Button;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Event;
  7. import java.awt.Font;
  8. import java.awt.Label;
  9. import java.awt.LayoutManager;
  10. import java.awt.List;
  11. import java.awt.Panel;
  12. import java.awt.TextField;
  13. import java.beans.Customizer;
  14. import java.beans.PropertyChangeListener;
  15. import java.beans.PropertyChangeSupport;
  16. import java.sql.Connection;
  17. import java.sql.DatabaseMetaData;
  18. import java.sql.ResultSet;
  19. import java.sql.SQLException;
  20. import java.util.Vector;
  21.  
  22. public class SelectCustomizer extends Panel implements Customizer {
  23.    private PropertyChangeSupport support = new PropertyChangeSupport(this);
  24.    TextField urlField;
  25.    TextField userField;
  26.    TextField passwordField;
  27.    Button viewButton;
  28.    Button backToTableButton;
  29.    Button backToStartButton;
  30.    Button userTablesButton;
  31.    Button allTablesButton;
  32.    Label status = new Label("");
  33.    int buttonOffset;
  34.    static final int NO_WORK = 0;
  35.    static final int DO_USER_TABLES = 1;
  36.    static final int DO_ALL_TABLES = 2;
  37.    static final int DO_VIEW = 3;
  38.    int work = 0;
  39.    String spaces = "                                                                                                                             ";
  40.    Connection con;
  41.    String url;
  42.    String user;
  43.    String password;
  44.    Vector tableNames;
  45.    List tableList;
  46.    List columnList;
  47.    String tableName;
  48.    String selectString;
  49.    Vector columnNames;
  50.    Vector columnTypes;
  51.    Select target;
  52.  
  53.    public SelectCustomizer() {
  54.       ((Container)this).setLayout((LayoutManager)null);
  55.       ((Component)this).reshape(200, 200, 400, 500);
  56.       new CustomizerWorkerThread(this);
  57.    }
  58.  
  59.    public void setObject(Object var1) {
  60.       this.target = (Select)var1;
  61.       this.url = this.target.getURL();
  62.       this.user = this.target.getUser();
  63.       this.password = this.target.getPassword();
  64.       this.createStartupScreen();
  65.       ((Component)this).show();
  66.    }
  67.  
  68.    void doWork() {
  69.       while(true) {
  70.          int var1 = this.getWork();
  71.          this.con = Util.connect(this.url, this.user, this.password, this.status);
  72.          if (this.con != null) {
  73.             if (var1 == 1) {
  74.                this.getTables(false);
  75.             } else if (var1 == 2) {
  76.                this.getTables(true);
  77.             } else if (var1 == 3) {
  78.                this.getInfo(this.tableName);
  79.             }
  80.  
  81.             Util.disconnect(this.con);
  82.          }
  83.       }
  84.    }
  85.  
  86.    private synchronized int getWork() {
  87.       this.work = 0;
  88.  
  89.       while(this.work == 0) {
  90.          try {
  91.             this.wait();
  92.          } catch (Exception var2) {
  93.          }
  94.       }
  95.  
  96.       int var1 = this.work;
  97.       return var1;
  98.    }
  99.  
  100.    private void getTables(boolean var1) {
  101.       try {
  102.          this.setStatus("Opened connection OK, searching for tables...");
  103.          DatabaseMetaData var2 = this.con.getMetaData();
  104.          String[] var3;
  105.          if (var1) {
  106.             var3 = new String[]{"TABLE", "SYSTEM TABLE"};
  107.          } else {
  108.             var3 = new String[]{"TABLE", null};
  109.          }
  110.  
  111.          ResultSet var4 = var2.getTables((String)null, "%", "%", var3);
  112.          this.tableNames = new Vector();
  113.  
  114.          int var5;
  115.          for(var5 = 0; var4.next(); ++var5) {
  116.             String var6 = var4.getString(2) + "." + var4.getString(3);
  117.             this.tableNames.addElement(var6);
  118.          }
  119.  
  120.          var4.close();
  121.          this.setStatus("Got " + var5 + " tables");
  122.          this.createTableScreen();
  123.       } catch (SQLException var7) {
  124.          this.setStatus(var7);
  125.          System.err.println("Caught SQLException : " + var7);
  126.          ((Throwable)var7).printStackTrace();
  127.       } catch (Exception var8) {
  128.          this.setStatus("Couldn't load JDBC-ODBC bridge driver");
  129.          System.err.println("Caught Exception : " + var8);
  130.          ((Throwable)var8).printStackTrace();
  131.       }
  132.    }
  133.  
  134.    public void getInfo(String var1) {
  135.       this.createInfoScreen(var1);
  136.       this.columnNames = new Vector();
  137.       this.columnTypes = new Vector();
  138.  
  139.       try {
  140.          int var2 = var1.indexOf(46);
  141.          String var3 = var1.substring(0, var2);
  142.          String var4 = var1.substring(var2 + 1, var1.length());
  143.          DatabaseMetaData var5 = this.con.getMetaData();
  144.  
  145.          ResultSet var6;
  146.          String var11;
  147.          for(var6 = var5.getColumns((String)null, var3, var4, "%"); var6.next(); this.columnTypes.addElement(var11)) {
  148.             String var7 = var6.getString(4);
  149.             this.columnNames.addElement(var7);
  150.             short var8 = var6.getShort(5);
  151.             short var9 = var6.getShort(7);
  152.             short var10 = var6.getShort(9);
  153.             switch (var8) {
  154.                case -7:
  155.                   var11 = "BIT";
  156.                   break;
  157.                case -6:
  158.                   var11 = "TINYINT";
  159.                   break;
  160.                case -5:
  161.                   var11 = "BIGINT";
  162.                   break;
  163.                case -4:
  164.                   var11 = "LONGVARBINARY";
  165.                   break;
  166.                case -3:
  167.                   var11 = "VARBINARY(" + var9 + ")";
  168.                   break;
  169.                case -2:
  170.                   var11 = "BINARY(" + var9 + ")";
  171.                   break;
  172.                case -1:
  173.                   var11 = "LONGVARCHAR";
  174.                   break;
  175.                case 1:
  176.                   var11 = "CHAR(" + var9 + ")";
  177.                   break;
  178.                case 2:
  179.                   var11 = "NUMERIC(" + var9 + "," + var10 + ")";
  180.                   break;
  181.                case 3:
  182.                   var11 = "DECIMAL(" + var9 + "," + var10 + ")";
  183.                   break;
  184.                case 4:
  185.                   var11 = "INTEGER";
  186.                   break;
  187.                case 5:
  188.                   var11 = "SMALLINT";
  189.                   break;
  190.                case 6:
  191.                   var11 = "FLOAT";
  192.                   break;
  193.                case 7:
  194.                   var11 = "REAL";
  195.                   break;
  196.                case 8:
  197.                   var11 = "DOUBLE";
  198.                   break;
  199.                case 12:
  200.                   var11 = "CHAR(" + var9 + ")";
  201.                   break;
  202.                case 91:
  203.                   var11 = "DATE";
  204.                   break;
  205.                case 92:
  206.                   var11 = "TIME";
  207.                   break;
  208.                case 93:
  209.                   var11 = "TIMESTAMP";
  210.                   break;
  211.                case 1111:
  212.                   var11 = "OTHER";
  213.                   break;
  214.                default:
  215.                   var11 = "???";
  216.             }
  217.          }
  218.  
  219.          var6.close();
  220.          this.finishInfoScreen();
  221.       } catch (SQLException var12) {
  222.          this.setStatus(var12);
  223.       }
  224.    }
  225.  
  226.    synchronized void resetScreen() {
  227.       ((Container)this).removeAll();
  228.       int var1 = ((Component)this).size().width;
  229.       int var2 = ((Component)this).size().height;
  230.       this.buttonOffset = 10;
  231.       this.status = new Label("", 0);
  232.       ((Container)this).add(this.status);
  233.       this.status.reshape(15, var2 - 30, 2 * var1, 25);
  234.    }
  235.  
  236.    synchronized void addButton(Button var1) {
  237.       int var2 = ((Component)this).size().height;
  238.       ((Container)this).add(var1);
  239.       ((Component)var1).reshape(this.buttonOffset, var2 - 65, 80, 30);
  240.       this.buttonOffset += 80;
  241.    }
  242.  
  243.    synchronized void createStartupScreen() {
  244.       this.resetScreen();
  245.       int var1 = ((Component)this).size().width;
  246.       Label var2 = new Label("Welcome to the Select Customizer.", 1);
  247.       ((Container)this).add(var2);
  248.       ((Component)var2).setFont(new Font("Dialog", 0, 16));
  249.       ((Component)var2).reshape(10, 100, var1 - 20, 50);
  250.       Label var3 = new Label("JDBC URL:", 2);
  251.       ((Container)this).add(var3);
  252.       ((Component)var3).reshape(20, 250, 70, 30);
  253.       this.urlField = new TextField(this.url, 40);
  254.       ((Container)this).add(this.urlField);
  255.       this.urlField.reshape(100, 250, 280, 30);
  256.       Label var4 = new Label("User:", 2);
  257.       ((Container)this).add(var4);
  258.       ((Component)var4).reshape(20, 300, 70, 30);
  259.       this.userField = new TextField(this.user, 40);
  260.       ((Container)this).add(this.userField);
  261.       this.userField.reshape(100, 300, 280, 30);
  262.       Label var5 = new Label("Password:", 2);
  263.       ((Container)this).add(var5);
  264.       ((Component)var5).reshape(20, 350, 70, 30);
  265.       this.passwordField = new TextField(this.password, 40);
  266.       ((Container)this).add(this.passwordField);
  267.       this.passwordField.reshape(100, 350, 280, 30);
  268.       this.setStatus("Enter login info and push \"user tables\" or \"all tables\"");
  269.       this.userTablesButton = new Button("User Tables");
  270.       this.addButton(this.userTablesButton);
  271.       this.allTablesButton = new Button("All Tables");
  272.       this.addButton(this.allTablesButton);
  273.    }
  274.  
  275.    synchronized void createTableScreen() {
  276.       this.resetScreen();
  277.       int var1 = ((Component)this).size().width;
  278.       int var2 = ((Component)this).size().height;
  279.       String var3 = "Database \"" + this.url + "\" has " + this.tableNames.size() + " tables.";
  280.       Label var4 = new Label(var3, 0);
  281.       ((Container)this).add(var4);
  282.       ((Component)var4).reshape(30, 10, var1 - 20, 25);
  283.       this.backToStartButton = new Button("Back");
  284.       this.addButton(this.backToStartButton);
  285.       this.tableList = new List();
  286.       ((Container)this).add(this.tableList);
  287.  
  288.       for(int var5 = 0; var5 < this.tableNames.size(); ++var5) {
  289.          String var6 = (String)this.tableNames.elementAt(var5);
  290.          this.tableList.addItem(var6);
  291.       }
  292.  
  293.       this.tableList.reshape(30, 40, 240, var2 - 110);
  294.       this.setStatus("Please chose a table");
  295.    }
  296.  
  297.    synchronized void createInfoScreen(String var1) {
  298.       this.resetScreen();
  299.       int var2 = ((Component)this).size().width;
  300.       ((Component)this).size();
  301.       Label var3 = new Label("Database:  " + this.url, 0);
  302.       ((Container)this).add(var3);
  303.       ((Component)var3).reshape(30, 35, var2 - 40, 20);
  304.       Label var4 = new Label("Table:    " + var1, 0);
  305.       ((Container)this).add(var4);
  306.       ((Component)var4).reshape(30, 55, var2 - 20, 20);
  307.       this.backToTableButton = new Button("Back");
  308.       this.addButton(this.backToTableButton);
  309.       this.setStatus("Loading table info...");
  310.    }
  311.  
  312.    synchronized void finishInfoScreen() {
  313.       int var1 = ((Component)this).size().width;
  314.       int var2 = ((Component)this).size().height;
  315.       Label var3 = new Label("Number of columns:  " + this.columnNames.size(), 0);
  316.       ((Container)this).add(var3);
  317.       ((Component)var3).reshape(30, 75, var1 - 20, 20);
  318.       this.columnList = new List();
  319.       this.columnList.setFont(new Font("Courier", 0, 12));
  320.       this.columnList.setMultipleMode(true);
  321.       ((Container)this).add(this.columnList);
  322.  
  323.       for(int var4 = 0; var4 < this.columnNames.size(); ++var4) {
  324.          String var5 = (String)this.columnNames.elementAt(var4);
  325.          String var6 = (String)this.columnTypes.elementAt(var4);
  326.          int var7 = 22 - var5.length();
  327.          String var8 = var5;
  328.          if (var7 > 0) {
  329.             var8 = var5 + this.spaces.substring(0, var7);
  330.          }
  331.  
  332.          var8 = var8 + var6;
  333.          this.columnList.addItem(var8);
  334.       }
  335.  
  336.       this.columnList.reshape(30, 120, 260, var2 - 200);
  337.       this.setStatus("Choose the columns you want in the SQL SELECT.");
  338.    }
  339.  
  340.    synchronized void setStatus(String var1) {
  341.       this.status.setText(var1);
  342.    }
  343.  
  344.    synchronized void setStatus(SQLException var1) {
  345.       System.err.println("Caught " + var1);
  346.       this.setStatus(String.valueOf(var1));
  347.    }
  348.  
  349.    private void exit() {
  350.       println("Exiting");
  351.       System.exit(0);
  352.    }
  353.  
  354.    public synchronized boolean handleEvent(Event var1) {
  355.       if (var1.id == 201) {
  356.          this.exit();
  357.       }
  358.  
  359.       if (var1.target != this.columnList || var1.id != 701 && var1.id != 702) {
  360.          if (var1.target == this.tableList && var1.id == 701) {
  361.             this.tableName = this.tableList.getSelectedItem();
  362.             this.work = 3;
  363.             this.notify();
  364.             return false;
  365.          } else if (var1.target != this.urlField || var1.id != 402 && var1.id != 404) {
  366.             if (var1.target != this.userField || var1.id != 402 && var1.id != 404) {
  367.                if (var1.target != this.passwordField || var1.id != 402 && var1.id != 404) {
  368.                   if (var1.target != null && var1.id == 1001) {
  369.                      if (var1.target == this.userTablesButton) {
  370.                         this.url = this.urlField.getText();
  371.                         this.work = 1;
  372.                         this.notify();
  373.                      } else if (var1.target == this.allTablesButton) {
  374.                         this.url = this.urlField.getText();
  375.                         this.work = 2;
  376.                         this.notify();
  377.                      } else if (var1.target == this.viewButton) {
  378.                         String var2 = this.tableList.getSelectedItem();
  379.                         if (var2 == null) {
  380.                            this.setStatus("Please chose a table");
  381.                         } else {
  382.                            this.tableName = var2;
  383.                            this.work = 3;
  384.                            this.notify();
  385.                         }
  386.                      } else if (var1.target == this.backToStartButton) {
  387.                         this.createStartupScreen();
  388.                      } else if (var1.target == this.backToTableButton) {
  389.                         this.createTableScreen();
  390.                      }
  391.  
  392.                      return false;
  393.                   } else {
  394.                      return false;
  395.                   }
  396.                } else {
  397.                   this.password = this.passwordField.getText();
  398.                   this.target.setPassword(this.password);
  399.                   this.support.firePropertyChange("password", (Object)null, this.password);
  400.                   return false;
  401.                }
  402.             } else {
  403.                this.user = this.userField.getText();
  404.                this.target.setUser(this.user);
  405.                this.support.firePropertyChange("user", (Object)null, this.user);
  406.                return false;
  407.             }
  408.          } else {
  409.             this.url = this.urlField.getText();
  410.             this.target.setURL(this.url);
  411.             this.support.firePropertyChange("URL", (Object)null, this.url);
  412.             return false;
  413.          }
  414.       } else {
  415.          this.updateSelect();
  416.          return false;
  417.       }
  418.    }
  419.  
  420.    private void updateSelect() {
  421.       int var1 = this.columnList.getItemCount();
  422.       String var2 = null;
  423.  
  424.       for(int var3 = 0; var3 < var1; ++var3) {
  425.          if (this.columnList.isIndexSelected(var3)) {
  426.             String var4 = (String)this.columnNames.elementAt(var3);
  427.             if (var2 == null) {
  428.                var2 = var4;
  429.             } else {
  430.                var2 = var2 + ", " + var4;
  431.             }
  432.          }
  433.       }
  434.  
  435.       if (var2 == null) {
  436.          this.selectString = "";
  437.       } else {
  438.          this.selectString = "SELECT " + var2 + " FROM " + this.tableName;
  439.       }
  440.  
  441.       System.err.println(this.selectString);
  442.       this.target.setSQL(this.selectString);
  443.       this.support.firePropertyChange("SQL", (Object)null, this.selectString);
  444.       this.target.update();
  445.    }
  446.  
  447.    static void println(String var0) {
  448.       System.out.println(var0);
  449.    }
  450.  
  451.    static void print(String var0) {
  452.       System.out.print(var0);
  453.    }
  454.  
  455.    public void addPropertyChangeListener(PropertyChangeListener var1) {
  456.       this.support.addPropertyChangeListener(var1);
  457.    }
  458.  
  459.    public void removePropertyChangeListener(PropertyChangeListener var1) {
  460.       this.support.removePropertyChangeListener(var1);
  461.    }
  462. }
  463.